/**
 *	The NeuroCoSA Toolkit
 *	Copyright (C) 2003-6 Stuart Meikle.
 *
 *	This is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU Lesser General Public
 *	License as published by the Free Software Foundation; either
 *	version 2.1 of the License, or (at your option) any later version.
 *
 *	This library is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *	Lesser General Public License for more details.
 *
 * @author	Stuart Meikle
 * @version	2006-halloween(mk2)
 * @license	LGPL
 */
package org.stumeikle.NeuroCoSA.AutoCluster;


//
// Interface from autocluster to neurocosa
//
// stumeikle 20060416
//
//

public	interface	AutoClusterNeuroCoSAIF
{
	public	boolean			requestNewACM();
	    //Autoclustermemorycontrol calls back lobe to request whether a new 
	    //autoclustermemory can be created. Lobe returns true or false
	    //does not need to be called when SCRAP BIN is created

	public	void			setNewACM(AutoClusterMemory acm);
	    //Called after request new acm.
	    //if the Lobe permits the creation of a new acm then acmc will
	    //create on and return the new structure to the lobe.
	    //Lobe will then create a new neuron and embed the acm structure within   

	public	boolean			mergeACMs( AutoClusterMemory first,
						  AutoClusterMemory second);
	    //Autoclustermemory control requests that the two bins are merged
	    //Lobe needs to find the relevant bins and determine if they can be merged.
	    //(might depend on existing connections formed etc)
    
	    //If ok , lobe can remove the neuron associated with second. connections
	    //of the neuron associated with first can be updated accordingly.
	    //acm associated with second can be lost.
    
	    //returns true , indicating ok and that the neurons are merged
	    //or
	    //returns false, indicating that the merge cannot process

	public	boolean			requestACMRemoval( AutoClusterMemory a );
	    //acm control requests that the acm a is removed.
	    //lobe to decide if the associated neuron can also be removed
	    //returns true or false

	public	void			removeACM( AutoClusterMemory a );
	    //should be called after the requestacmremoval returns true
	    //lobe to remove associated neuron

/* maybe...
	public	long			getTime()
	{
	    //return lobe time
	}
*/

}

